// 数据库操作
const mongoose = require('mongoose');
// 对象规则验证
const Joi = require('joi');
// 模型规则类
const Schema = mongoose.Schema;

// 商品分类规则 三级分类
const goodsModel = new Schema({
		// 商品名称
		goods_name: {
			type: String,
			minlength: 10,
			maxlength: 100,
			required: true,
		},
		// 商品库存
		goods_number: {
			type: Number,
			default: 0
		},
		goods_weight: {
			type: Number,
			default: 0
		},
		// 商品价格
		goods_price: {
			type: Number,
			default: 0
		},
		// 商品零售价
		goods_msg_price: {
			type: Number,
			default: 0
		},
		// 销量
		sales_volume: {
			type:Number,
			default: 0
		},
		// 商品分类 只是能三级分类
		goods_cate: {
			type: mongoose.Schema.Types.ObjectId,
			ref: 'CategoryThree'
		},
		// 商品参数
		goods_dy_attr: [{
			attr_name: { type: String },
			attr_vals: [{type:String}]
		}],
		// 商品属性
		goods_static_attr: [{
			attr_name: { type: String },
			attr_vals: { type: String }
		}],
		// 商品所属店铺
		goods_store: {
			type: mongoose.Schema.Types.ObjectId,
			ref: 'Store'
		},
		// 商品图片
		goods_imgs: [{
			type: String,
			default: ''
		}],
		// 商品内容
		goods_content: {
			type: String,
			default: ''
		},
		// 是否热门推荐
		is_recommend: {
			type: Boolean,
			default: false
		},
		// 添加时间
		add_time: {
			type: Date,
			default: Date.now
		},
}, {versionKey: false});

// 创建商品集合 
const Goods = mongoose.model('goods',goodsModel,'goods');


// 商品分类格式校验
const validateGoods = goods => {
	// 定义对象验证规则
	const schema = {
		goods_name: Joi.string().min(10).max(100).required().error(new Error('商品名称不符合验证验证规则')),
		goods_number: Joi.number().min(0).error(new Error('商品数量不符合验证规则')),
		goods_price: Joi.number().min(0).error(new Error('商品价格不符合验证规则')),
		goods_msg_price: Joi.number().min(0).error(new Error('商品零售价格不符合验证规则')),
		goods_weight: Joi.number().min(0).error(new Error('商品重量不符合验证规则')),
		add_time: Joi.date().default(Date.now, 'created time')
	};
	// 验证
	return Joi.validate(goods, schema, {
		// 检测到所有错误
		abortEarly: false,
		// 允许对象包含被忽略的未知键
		allowUnknown: true
	});
}



// 导出模块成员
module.exports = {
	Goods,
	validateGoods
}
